package com.shxy.api.service;

import com.shxy.api.bean.news.CatalogBean;
import com.shxy.api.bean.news.NewsBean;
import com.shxy.api.bean.news.NewsInfo;
import org.springframework.data.domain.Page;

import javax.transaction.Transactional;
import java.util.List;
import java.util.Map;

/**
 * 新闻管理接口
 */
public interface INewsService {

    /**
     * 判断栏目是否存在
     * @param name 名称
     * @param parentId 父节点编号
     * @return
     */
    boolean isCatalogExist(String name, String parentId);

    /**
     * 添加栏目
     * @param name 名称
     * @param parentId 父节点编号
     * @return 新添加的节点
     */
    CatalogBean addCatalog(String name, String parentId);

    /**
     * 判断节点是否存在
     * @param id 节点编号
     * @return
     */
    boolean isCatalogExist(String id);

    /**
     * 获取指定节点的子节点列表
     * @param id 父节点编号
     * @return
     */
    CatalogBean getCatalogById(String id);

    /**
     * 获取指定栏目的子节点列表
     * @param catalogId 栏目编号
     * @return
     */
    List<CatalogBean> getChildrenCatalogs(String catalogId);

    /**
     * 修改栏目名称
     * @param id 编号
     * @param name 名称
     * @return
     */
    boolean modifyCatalogName(String id, String name);

    /**
     * 移动栏目
     * @param id 栏目id
     * @param parentId 父节点id
     * @return
     */
    boolean moveCatalog(String id, String parentId);

    /**
     * 删除栏目
     * @param id 编号
     * @return
     */
    @Transactional
    boolean deleteCatalogById(String id);

    /**
     * 删除全部栏目
     * @return
     */
    int deleteCatalogAll();

    /**
     * 检查指定栏目下是否存在相同标题的新闻
     * @param title 标题
     * @param catalogId 栏目编号
     * @return
     */
    boolean isNewsExists(String title, String catalogId);

    /**
     * 保存新闻
     * @param title 标题
     * @param content 内容
     * @param catalogId 栏目编号
     * @param authorId 作者编号
     * @return
     */
    @Transactional
    NewsInfo saveNews(String title, String content, String catalogId, String authorId);

    /**
     * 保存新闻内容
     * @param news 新闻实体
     * @return
     */
    boolean updateNews(NewsBean news);

    /**
     * 根据编号查询新闻信息
     * @param id 编号
     * @return
     */
    NewsInfo getNewsInfoById(String id);

    /**
     * 获取所以栏目列表
     * @return
     */
    List<CatalogBean> getCatalogsAll();

    /**
     * 分页查询栏目所属新闻列表
     * @param catalogId 栏目编号
     * @param page 页码
     * @param size 每页记录条数
     * @return
     */
    Page<NewsInfo> getPagedNewsOfCatalog(String catalogId, int page, int size);

    /**
     * 分页查询栏目所属新闻列表
     * @param catalogId 栏目编号
     * @param page 页面
     * @param size 每页记录条数
     * @param isAll 是否包含子节点
     * @return
     */
    Page<NewsInfo> getPagedNewsOfCatalog(String catalogId, int page, int size, boolean isAll);
}
